iT邦幫忙

2023 iThome 鐵人賽

DAY 27
1

續上一篇機器學習 挑戰 - Day 5
我們今天繼續詳細研究一下如何套用 tensorflow.keras.sequential 來預測BTC的價格。

我想嘗試2種類型的模型。一個使用LSTM(model2),另一個不使用(model1)。

為什麼必須將訓練過程分配給一個變數呢?
原因是因為model.fit(...)返回一個包含訓練性能的對象。
在TensorFlow中,使用.fit(...)返回一個具有模型訓練性能的對象。這個對象可以用於可視化這些性能並詳細分析它們。

在model.compile中,我們選擇'mse',這意味著均方誤差,它取預測和實際輸出之間的差異,對其進行平方並在整個數據集上進行平均。

我們將使用"Adam"作為優化器,因為我發現"AdamW"已經無法使用。

Model 1: feedforward neural network (FNN)
模型1是使用前饋神經網絡(FNN)構建的,其中信息在其各層之間的流動是雙向的,這意味著模型中的信息僅以一個方向流動,即從輸入節點,通過隱藏節點(如果有的話)並到達輸出節點,沒有循環或迴圈。

我選擇100 epoch代表我要訓練數據集完整地通過算法100次。
https://ithelp.ithome.com.tw/upload/images/20231012/20162091mzwBqfhCVW.png
可以看到以上的mean_absolute_error數值在290跟300重複來回。到100次時也只降到了286。

把model訓練的成果用圖顯示的話,

https://ithelp.ithome.com.tw/upload/images/20231012/20162091MdaWtYTDUK.png

在training set中訓練的model看似蠻相近的,我們再看看validation以及testing。
https://ithelp.ithome.com.tw/upload/images/20231012/2016209161lYhcqtnf.png

https://ithelp.ithome.com.tw/upload/images/20231012/20162091V2sTjPLAft.png

我們可以看出model1可預測的還是很不準確,有一些預測直接跟實際closing price正相反。

Model 2: Recurrent Neural Network with LSTM?
LSTM是RNN(循環神經網絡)的一種特殊類型,能夠學習長期依賴性。

套上一樣的訓練次數,我們看看model2的mse。
https://ithelp.ithome.com.tw/upload/images/20231012/20162091LNlmw7OI9C.png

從上圖可以看出 model2的mse更高!最後一直在1600之間重複來回。

把model訓練的成果用圖顯示的話,
https://ithelp.ithome.com.tw/upload/images/20231012/20162091hC7rHFlLRV.png

model2完全直接預測一條直線!
我們再看看validation以及testing。
https://ithelp.ithome.com.tw/upload/images/20231012/20162091puK5pfq7oN.png

https://ithelp.ithome.com.tw/upload/images/20231012/20162091j5JiyHQeeT.png

直線跟上兩圖的closing price最高點還蠻接近的,但期間的波動就完全沒預測到。

以下是一些主要區別:

層類型:

  • model1 使用全連接(dense)層作為其架構。
  • model2 具有一個LSTM層,專門用於序列數據。

數據輸入形狀:

  • model1 預期輸入數據的形狀為(batch_size, 3)。它以三個特徵作為輸入(通過input_dim=3指定)。
  • model2 預期輸入數據的形狀為(batch_size, 3, 1)。它設計用於處理具有三個時間步(特徵)和每個時間步一個特徵的序列。

層激活函數:

  • 在model1中,所有層都使用ReLU(修正的線性單位)激活函數。
  • model2 在密集層中使用ReLU激活,但通常在LSTM層中使用專門的激活函數來捕捉序列模式。

架構和連接:

  • model1 具有經典的前饋架構,這意味著數據只能從輸入層流向輸出層。
  • model2 由於LSTM層,具有遞歸連接,允許捕捉數據中的序列依賴性。這使其適用於時間序列或序列數據。

應用案例:

  • model1 更適用於表格數據或沒有固有序列或時間依賴性的數據。
  • model2 設計用於序列數據,如時間序列,自然語言或任何順序觀察的順序很重要的數據。

總之,model1 在這情況比較適合。

在下一篇,我想要研究一下可否加入多項其他變數來預測未來價格。


其他參考資料:
https://machinelearningmastery.com/rectified-linear-activation-function-for-deep-learning-neural-networks/
https://towardsdatascience.com/stochastic-gradient-descent-clearly-explained-53d239905d31

https://keras.io/api/layers/recurrent_layers/lstm/
https://colah.github.io/posts/2015-08-Understanding-LSTMs/


對 dbt 或 data 有興趣?歡迎加入 dbt community 到 #local-taipei 找我們,也有實體 Meetup 請到 dbt Taipei Meetup 報名參加
Ref:

https://levelup.gitconnected.com/20-pandas-functions-for-80-of-your-data-science-tasks-b610c8bfe63c


上一篇
機器學習 挑戰 - Day 5
下一篇
機器學習 挑戰 - Day 7
系列文
資料分析的硬體以及軟體學習以及成長心得30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言